import axios from 'axios'
import { getToken,removeToken } from '@/utils/cookie'
import store from '@/store'
import router from '@/router'

const service = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 30000  // 增加超时时间到30秒
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 为支付相关请求增加更长的超时时间
    if (config.url.includes('/pay/')) {
      config.timeout = 60000  // 支付请求设置为60秒超时
    }
    
    // 添加请求日志
    console.log('发送请求:', config.method, config.url, config.data || config.params)
    
    // 可以在这里添加请求头等配置
    const token = getToken()
    if (token) {
      config.headers['Authorization'] = token
    }
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    // 添加响应日志
    console.log('接收响应:', response.config.url, response.data)
    
    const res = response.data
    if (res.code === 200) {
      return res
    } else if(res.code === 404){
      console.error('请求路径不存在:', response.config.url)
      return Promise.reject(new Error('请求路径不存在'))
    }else if(res.code === 401){
      console.error('登录过期:', response.config.url)
      removeToken()
      //这里获取不到this，所以需要使用全局变量
      store.commit('SET_USER_INFO', null)
      router.push('/login')
      return Promise.reject(new Error('当前登录已过期，请重新登录'))
    }else {
      // 增强错误日志
      console.error('响应错误:', {
        url: response.config.url,
        status: response.status,
        code: res.code,
        message: res.message,
        data: res.data,
        fullResponse: res
      })
      return Promise.reject(new Error(res.message || '请求失败'))
    }
  },
  error => {
    // 增强网络错误日志
    console.error('响应异常:', {
      message: error.message,
      config: error.config ? {
        url: error.config.url,
        method: error.config.method,
        data: error.config.data,
        params: error.config.params
      } : '无配置信息',
      response: error.response ? {
        status: error.response.status,
        statusText: error.response.statusText,
        data: error.response.data
      } : '无响应数据',
      stack: error.stack
    })
    
    // 如果是网络错误，显示友好提示
    const errorMsg = error.response && error.response.data && error.response.data.message 
      ? error.response.data.message 
      : '网络请求失败，请检查您的网络连接';
      
    return Promise.reject(new Error(errorMsg))
  }
)

export default service